import { NestFactory } from '@nestjs/core';
import { ValidationPipe } from '@nestjs/common';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
import { config } from 'dotenv';
import { resolve } from 'path';

// 手动加载.env文件（确保环境变量可用）
const envPath = resolve(__dirname, '../../.env');
config({ path: envPath });
console.log('📁 Loading .env from:', envPath);
console.log('🔍 DB_USERNAME:', process.env.DB_USERNAME ? '✅ Loaded' : '❌ Missing');
console.log('🔍 REDIS_PASSWORD:', process.env.REDIS_PASSWORD ? '✅ Loaded' : '❌ Missing');

/**
 * 应用程序入口
 */
async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);

  // 启用全局验证管道
  app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true, // 自动删除未在 DTO 中定义的属性
      forbidNonWhitelisted: true, // 如果有未定义的属性，抛出错误
      transform: true, // 自动转换类型
      transformOptions: {
        enableImplicitConversion: true,
      },
    }),
  );

  // 启用 CORS（开发测试模式：允许所有跨域）
  app.enableCors({
    origin: true, // 允许所有来源
    credentials: true,
    methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
    allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
    exposedHeaders: ['Content-Length', 'Content-Type'],
  });

  // 配置静态资源服务
  app.useStaticAssets(join(process.cwd(), 'uploads'), {
    prefix: '/uploads/',
  });

  // 设置全局前缀
  app.setGlobalPrefix('api');

  const port = process.env.PORT || 3001;
  await app.listen(port);

  console.log(`
    🚀 应用启动成功！
    📝 API 地址: http://localhost:${port}/api
    🌍 环境: ${process.env.NODE_ENV}
  `);
}

bootstrap();







